#ifndef __MYSTRING_H__
#define __MYSTRING_H__

#include <iostream>

class MyString
{
public:
    MyString();// 默认构造
    MyString(const char* str);// 带参构造
    ~MyString();// 析构
    MyString(const MyString& str);// 拷贝构造
    MyString& operator=(const MyString& str);// 赋值运算符重载

    
    MyString& operator+=(const MyString& str);// 重载+=运算符
    void operator+=(const char& c);
    MyString operator+(const MyString& str);// 重载+运算符

    MyString& operator-=(const MyString& str);// 重载 -= 运算符
    MyString operator-(const MyString& str);// 重载 - 运算符

    char& operator[](int index);// 重载 [] 运算符

    bool operator==(const MyString& str);// 重载 == 运算符
    bool operator!=(const MyString& str);// 重载 != 运算符

    bool operator>(const MyString& str);// 重载 > 运算符
    bool operator<(const MyString& str);// 重载 < 运算符
    bool operator>=(const MyString& str);// 重载 >= 运算符
    bool operator<=(const MyString& str);// 重载 <= 运算符

    bool operator&&(const MyString& str);// 重载 && 运算符
    bool operator||(const MyString& str);// 重载 || 运算符


    // 全局友元 重载
    friend std::ostream& operator<<(std::ostream& os, const MyString& str);// 输出运算符重载

    // 如果加了const 就改变不了了
    friend std::istream& operator>>(std::istream& is, MyString& str);// 输入运算符重载




private:
    char *s;
    int capacity;// 数组大小
    int size;    // 字符串长度

};

// 全局友元 重载
std::ostream& operator<<(std::ostream& os, const MyString& str);// 输出运算符重载

// 如果加了const 就改变不了了
std::istream& operator>>(std::istream& is, MyString& str);// 输入运算符重载






#endif // !__MYSTRING_H__